import {
	mapState
} from 'vuex'
import _data from './_data';
import _onSocket from './onSocketMessage';
import globalConfig from './config';
import store from "@/store"
import ws from "./websocket.js";
import request from "./request.js";
// 尝试将用户在根目录中的store/index.js的vuex的state变量，全部加载到全局变量中
let StoreKey = [];
try {
	StoreKey = store.state ? Object.keys(store.state) : [];
} catch (e) {

}
console.log(StoreKey)

/**
 * socket 发送用到的一个函数
 */
function stringSource(s) {
	let i = 0;
	return () => {
		return i < s.length ? s.charCodeAt(i++) : null;
	};
}

export default {
	created() {
		// 将vuex方法挂在到$u中
		// 使用方法为：如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
		// 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
		this.$u.vuex = (name, value) => {
			this.$store.commit('setStore', {
				name,
				value
			})
		}
	},
	computed: {
		// 将vuex的state中的所有变量，解构到全局混入的mixin中
		...mapState(StoreKey),
	},
	/** 添加方法时,方法name前加$以避免与页面方法冲突 */
	methods: {

		/**
		 *  http 请求
		 *  config object
		 *  {
		 *      path: string, 请求路径
		 *	 	data: object, 发送数据
		 * 		success: function, 回调
		 * 		fail: function, 错误回调
		 * 		type: string 请求方式(默认post)
		 * 		success_action: boolean err状态不为0时是否执行success回调(默认是err状态不为0就只提示msg而不执行success回调)
		 * 		check: false 是否验证登陆默认不验证
		 *	}
		 */
		$httpSend(config) {
			return request.request(config);
		},

		/**
		 * 通过 websocket 发送数据,
		 * 如果还没有连接 websocket 就先连接websocket,过两秒等websocket连接上了发送本次的数据,如果两秒后还是没有连接上，则舍弃这次发送数据，
		 * 如果发送的值为空则只连接
		 *    @param send_data object
		 *    {
		 *		action: 'model.controller.action',
		 *		data: {}
		 *	}
		 */
		$socketSend(send_data) {
			return ws.send(send_data)
		},

		/**
         * http发送文件(图片、文件、语音)
         * @param config obj
         * {
			local_url: string * 在不调用上传控件的时候的本地文件地址
			data: json obj * 上传的数据
			success: function * 上传成功回调
			fail: function * 上传失败回调
			type: int 0对话上传文件 1上传头像 2朋友圈上传文件 3朋友圈背景图片上传 4群头像上传
			onProgressUpdate: function 上传进度监听
		   }
         */
		$httpSendFile(config) {
			return request.file(config)
		}
	}
}
